88. Merge Sorted Array
1.題目說明:給兩個遞增排序的整數陣列 nums1 和 nums2,以及兩個整數 m 和 n,表示 nums1 有 m 個有效元素,nums2 有 n 個有效元素。
請你把 nums2 合併到 nums1 裡面,使 nums1 仍為一個「遞增排序」的陣列。
注意:
- nums1 的長度已經足夠容納所有元素(即 nums1.length = m + n)。
- 必須 原地(in-place)修改 nums1。
2.解題思路:從「後面」往前合併
因為 nums1 的尾端有空間(多出 n 個位置),
如果從前面合併會覆蓋掉尚未處理的值。
三個指標:
- i = m - 1 → 指向 nums1 有效部分的最後一個元素
- j = n - 1 → 指向 nums2 的最後一個元素
- k = m + n - 1 → 指向 nums1 最後一格(準備填入最大值)
比較 nums1[i] 和 nums2[j]:
- 若 nums1[i] > nums2[j] → 把 nums1[i] 填入 nums1[k]
- 否則把 nums2[j] 填入 nums1[k]
每次 k--,i 或 j 對應減一。
3.範例:
輸入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
執行過程:
i=2 (→3), j=2 (→6), k=5
nums1[i]<nums2[j] → nums1[5]=6, j=1, k=4
i=2 (→3), j=1 (→5), k=4
nums1[i]<nums2[j] → nums1[4]=5, j=0, k=3
i=2 (→3), j=0 (→2), k=3
nums1[i]>nums2[j] → nums1[3]=3, i=1, k=2
i=1 (→2), j=0 (→2), k=2
nums1[i]<=nums2[j] → nums1[2]=2, j=-1, k=1
結果:nums1 = [1,2,2,3,5,6]
4.程式碼截圖:
5.學習心得:這次的題目對我來說比較陌生,之前比較沒做過類似的題目,但我還是藉由AI的輔助去學習,有比解了解這題的解題思路及運用的技巧。